package com.kaifamiao.lambda;

public class FlyableTest {

    public static void main(String[] args) {

        Flyable f = new Flyable() {
            @Override
            public void fly() {
                this.hello(); // 调用从接口继承的 default 方法
                System.out.println( "导弹飞起来了" );
            }
        };

        f.hello();
        f.fly();

        System.out.println( "- - - - - -" );

        // 等号之后的表达式相当于实现了 Flyable接口 及其 抽象方法
        // 此时就说等号之后的 Lambda表达式 的 目标类型 是 Flyable
        Flyable x = () -> {
            // this.hello(); // 不仅不能调用接口继承的 default 方法，而且连 this 都不可用
            System.out.println( "导弹飞起来了" );
        };

        x.hello();
        x.fly();

        // 将 由 Lambda表达式 创建的实例转化为 那种类型，则那种类型就是 Lambda表达式 的目标类型
        // 比如这里的 Lambda表达式 的目标类型就是 Flyable
        Object t = (Flyable)() -> System.out.println("虫儿飞");
        System.out.println( t );

    }

}
